\message{ !name(AutoMountUsingIvman.tex)}\documentclass[12pt,a4paper]{article}

\usepackage{CJK}
\usepackage[margin=1.5cm, includefoot]{geometry}
\usepackage{indentfirst}

\begin{CJK}{UTF8}{fzst}
  \title{用ivman实现可移动设备的自动挂载}
  \author{陈如山\\chenrs@ics.neu.edu.cn}
  \date{2008年06月27日}
\end{CJK}

\begin{document}

\message{ !name(AutoMountUsingIvman.tex) !offset(-3) }


\newlength{\parboxWidth}
\setlength{\parboxWidth}{13cm}
\newlength{\lineIndentWidth}
\setlength{\lineIndentWidth}{4ex}
\newlength{\vspaceForParbox}
\setlength{\vspaceForParbox}{2ex}

\begin{CJK}{UTF8}{fzst}
  \maketitle

  {\bf \large 注：本文所说方法对于使用 Gnome 和 KDE 桌面环境的用户并非必要，因为这两个桌面环境各自
    集成了自动挂载可移动设备的工具。}
  
  \section{概述}
  ivman 是一个 volume manager，通过配置 ivman ，可以实现如下功能：
  \begin{quote}\bf 当符合一定条件的设备插入系统时，ivman 调用执行相应的系统命令。\end{quote}
  
  利用这一特性，我们可以实现对可移动设备的自动挂载。
  
  \section{配置文件}
  ivman 的系统级配置文件存放在 /etc/ivman/ 目录下，用户级配置文件存放在 \$HOME/.ivman/
  下，对于普通用户，最好还是编辑用户级配置文件。
  
  ivman 的配置文件有多个，我们要用的主要是 IvmConfigActions.xml，从名字可以看出它其实是
  一个 xml 文件，语法如下：
  \begin{quote}
    \fbox{
      \parbox{\parboxWidth}{
        $<$ivm:Match name="matchname" value="matchvalue"$>$\\
        \hspace*{\lineIndentWidth}$<$ivm:Option name="optionname1" value="optionvalue1" /$>$\\
        \hspace*{\lineIndentWidth}$<$ivm:Option name="optionname2" value="optionvalue2" /$>$\\
        \hspace*{\lineIndentWidth}...\\
        $<$/ivm:Match$>$
      }
    }
  \end{quote}
  
  这里 $<$ivm:Match ... $>$ 就定义了我们上面说到的"条件"，当我们插入的设备满足这个条件时，就
  进入这个 Match 块，而 $<$ivm:Option ... $>$ 就定义了要执行动作的类型和动作命令。

  \begin{itemize}
  \item 
  \end{itemize}
  \begin{itemize}
    
  \end{itemize}
  
  其中，matchname 取自命令 lshal 的输出，lshal 的输出形式如下所示：
  \begin{quote}
    \fbox{
      \parbox{\parboxWidth}{
        \vspace{\vspaceForParbox}
        ... ...\\
        block.device = '/dev/sda'  (string)\\
        block.is\_volume = false  (bool)\\
        block.major = 8  (0x8)  (int)\\
        block.minor = 0  (0x0)  (int)\\
        ... ... 
      }
    }
  \end{quote}
  可以看出，lshal 的输出都是 {\em "name = value"} 的形式，而 IvmConfigActions.xml 中的
  matchname 就= hal.name，例如：对于前面 lshal 的输出项 block.device，在 IvmConfigActions.xml
  中引用时就变成 hal.block.device。
\end{CJK}
\end{document}

\message{ !name(AutoMountUsingIvman.tex) !offset(-85) }
